package com.hc.comm.base;


import java.util.List;
import java.util.Map;



/**
 * dao顶层接口，里面声明了对一个实体的增删改查，批量修改、添加的方法
 * 
 * @author 
 */
public interface IBaseDao {

	/**
	 * 数据库类型
	 * 
	 * @return
	 */
	public String getDbtype();

	/**
	 * 主键名称
	 * 
	 * @return
	 */
	public String getPrimaryKeyName();

	/**
	 * 数据库类型
	 * 
	 * @param dbtype
	 */
	public void setDbtype(String dbtype);

	/**
	 * 根据sequence的名称获取sequence的值
	 * 
	 * @param sequenceName
	 * @return
	 */
	public int getSequenceValueBySequenceName(String sequenceName)
			throws Exception;

	/**
	 * 新增model
	 * 
	 * @param <T>
	 * @param model
	 *            需要添加的model,需继承Model类
	 * @return 新增以后的model
	 * @throws Exception
	 */
	public <T extends Model> T insertModel(T model) throws Exception;
	
	
	
	/**
	* @Title: insert
	* @Description: 批量插入
	* @param @param models
	* @param @throws Exception    设定文件
	* @return void    返回类型
	* @throws
	 */
	@SuppressWarnings("rawtypes")
	public void insertBatch(List models) throws Exception;

	/**
	 * 删除一个对象
	 * 
	 * @param paramMap
	 *            参数列表
	 * @return 返回影响的行数
	 * @throws Exception
	 */
	public int deleteModel(Object object) throws Exception;

	/**
	 * 修改model
	 * 
	 * @param model
	 * @return 影响的行数
	 * @throws Exception
	 */
	public int updateModel(Object object) throws Exception;

	/**
	 * 获取符合条件的model的数量
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public long getModelListCount(Map<Object, Object> paramMap)
			throws Exception;

	/**
	 * 获取model列表
	 * 
	 * @param <T>
	 * @param paramMap
	 *            查询参数列表
	 * @return 返回结果列表
	 * @throws Exception
	 */
	@SuppressWarnings("rawtypes")
	public List getModelList(Map<Object, Object> paramMap) throws Exception;

	/**
	 * 根据对象的id获取对象
	 * 
	 * @param id
	 * @throws Exception
	 */
	public <T extends Model> T getModelById(Object id) throws Exception;
	
	/**
	 * 根据map更新数据
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int updateByMap(Map<Object, Object> paramMap) throws Exception;

}
